package main

import (
	"errors"
	"fmt"
	"net"
	"net/http"
	"net/rpc"
)

type Args struct {
	A, B int
}

type Query struct {
	X, Y int
}

type Last struct {
}

func (l *Last) Multiply(ag *Args, reply *int) error {
	*reply = ag.A * ag.B // 乘法
	fmt.Println(reply, "乘法执行了")

	return nil
}

func (l *Last) Divide(ag *Args, qy *Query) error {
	if ag.B == 0 {
		return errors.New("除数不能为0")
	}

	qy.X = ag.A / ag.B
	qy.Y = ag.A % ag.B

	fmt.Println("执行了除法")

	return nil
}

/*
RPC :远程协议调用
1.函数必须首字母为大写（可以导出）
2.必须要有两个导出类型
3.第一个参数为接受的参数类型，第二个返回给客户端的参数，而且第二个参数必须为指针类型
4.函数还有一个返回error 类型
*/
func main() {
	la := new(Last)

	fmt.Println(la, ":la")
	rpc.Register(la) //注册类型
	rpc.HandleHTTP() //设定http类型

	list, err := net.Listen("tcp", "127.0.0.1:1234")
	if err != nil {
		panic(err)
	}

	http.Serve(list, nil)

}
